package br.ufrn.sipac.patrimonio.coletor.activity;

import java.util.Arrays;

import android.app.Activity;
import android.content.Intent;
import android.os.Bundle;
import android.view.Menu;
import android.view.MenuItem;
import android.view.View;
import android.widget.AdapterView;
import android.widget.AdapterView.OnItemClickListener;
import android.widget.ListView;
import br.ufrn.sipac.patrimonio.auxiliares.ConstantesOperacoes;
import br.ufrn.sipac.patrimonio.coletor.R;
import br.ufrn.sipac.patrimonio.coletor.controller.LevantamentoController;
import br.ufrn.sipac.patrimonio.coletor.controller.MainController;
import br.ufrn.sipac.patrimonio.coletor.exception.DatabaseException;
import br.ufrn.sipac.patrimonio.coletor.exception.TransmissaoException;

/**
 * Activity que contém as principais opções da aplicação associadas ao
 * levantamento de bens.
 * 
 * @author Giuliana Silva Bezerra
 * 
 */
public class MenuActivity extends Activity {
	/** Constantes de operações */
	private static final int NOVO_LEVANTAMENTO = 0;
	private static final int CONTINUAR_LEVANTAMENTO = 1;
	private static final int VISUALIZAR_LEVANTAMENTO = 2;
	private static final int FINALIZAR_LEVANTAMENTO = 3;
	private static final int CONFIGURACAO = 4;

	private ListView menu;

	@Override
	protected void onCreate(Bundle savedInstanceState) {
		super.onCreate(savedInstanceState);
		setContentView(R.layout.activity_menu);
		// Mapear os componente da tela
		menu = (ListView) findViewById(R.id.menu);

		// Opções do menu
		String[] opcoes = new String[] { "Novo    Levantamento",
				"Continuar Levantamento", "Visualizar Levantamento",
				"Finalizar Levantamento", "Configurar   Conex\u00e3o" };
		MenuAdapter adapter = new MenuAdapter(this, Arrays.asList(opcoes));
		menu.setAdapter(adapter);

		// Adicionar listeners
		menu.setOnItemClickListener(new ItemMenuListener());
		
		//Limpa dados em cache
		LevantamentoController.clear();
	}

	@Override
	public boolean onCreateOptionsMenu(Menu menu) {
		// Inflate the menu; this adds items to the action bar if it is present.
		getMenuInflater().inflate(R.menu.autenticacao, menu);
		return true;
	}

	/**
	 * Carrega menu da aplicação.
	 */
	private void iniciaMenu() {
		finish();
		Intent intent = new Intent(this, MenuActivity.class);
		startActivity(intent);
	}

	@Override
	public boolean onOptionsItemSelected(MenuItem item) {
		switch (item.getItemId()) {
		case R.id.item2:
			iniciaMenu();
		case R.id.item1:
			finish();
		}
		return false;
	}

	/**
	 * Carrega tela de escolha das configurações de conexão da aplicação.
	 */
	public void carregarConfiguracao() {
		finish();
		Intent intent = new Intent(this, ConfiguracaoActivity.class);
		startActivity(intent);
	}

	/**
	 * Inicia fluxo da dados para efetuar um novo levantamento.
	 */
	public void iniciaNovoLevantamento() {
		// Limpa os dados em cache do controlador
		LevantamentoController.clear();

		try {
			if (LevantamentoController.getInstance().getUsuario().getId() > 0)
				MainController.findFinalidadesLevantamento(this);

			Intent intent = new Intent(this, TipoLevantamentoActivity.class);
			finish();
			startActivity(intent);
		} catch (DatabaseException e) {
		} catch (TransmissaoException e) {
		}
	}

	public void iniciaVisualizarLevantamento() {
		finish();
		Intent intent = new Intent(this, ListaLevantamentoActivity.class);
		MainController.setTipoOperacao(ConstantesOperacoes.OPERACAO_VISUALIZAR);
		startActivity(intent);
	}

	public void iniciaLevantamento() {
		finish();
		Intent intent = new Intent(this, ListaLevantamentoActivity.class);
		MainController
				.setTipoOperacao(ConstantesOperacoes.OPERACAO_CONTINUAR_LEVANTAMENTO);
		startActivity(intent);
	}

	public void iniciaFinalizarLevantamento() {
		finish();
		Intent intent = new Intent(this, ListaLevantamentoActivity.class);
		MainController
				.setTipoOperacao(ConstantesOperacoes.OPERACAO_FINALIZAR_LEVANTAMENTO);
		startActivity(intent);
	}

	/************************************ Listeners ******************************************************/

	public class ItemMenuListener implements OnItemClickListener {

		@Override
		public void onItemClick(AdapterView<?> arg0, View arg1, int arg2,
				long arg3) {
			if (arg2 == NOVO_LEVANTAMENTO)
				iniciaNovoLevantamento();
			else if (arg2 == VISUALIZAR_LEVANTAMENTO)
				iniciaVisualizarLevantamento();
			else if (arg2 == CONTINUAR_LEVANTAMENTO)
				iniciaLevantamento();
			else if (arg2 == FINALIZAR_LEVANTAMENTO)
				iniciaFinalizarLevantamento();
			else if (arg2 == CONFIGURACAO)
				carregarConfiguracao();
		}

	}

	@Override
	public void onBackPressed() {
		// Desabilita botão voltar.
	}
}
